/*
*作者：luoyixin
*日期：14/6/25
*功能：实现单项链表，以及所有功能
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
   int data;
   struct LNode *next;
}LNode,*Link;
void CreateLink(Link* l)
{
   int length;
   (*l)=(Link)malloc(sizeof(LNode));
   (*l)->next=NULL;
   printf("请输入字符数：\n");
   scanf("%d",&length);
   printf("请依次输入字符：\n");
   int i=0;
   int ch;
   for(i=length;i>0;i--)
   {
        Link h=(Link)malloc(sizeof(LNode));
	scanf("%d",&ch);
	h->next=(*l)->next;
        h->data=ch;
        (*l)->next=h;
   }
}
void Show(Link l)//打印链表中所有的值
{
	int i;
	Link ln=l->next;
	while(ln!=NULL)
	{
		printf("%d/",ln->data);
		ln=ln->next;
	}
	printf("\n");
}
void Merge(Link a,Link b,Link* c)
{
	Link aa=a->next;
	Link bb=b->next;
	(*c)=(Link)malloc(sizeof(LNode));
	(*c)->next=NULL;
	while(aa!=NULL&&bb!=NULL){
	if(aa->data>bb->data)
	{
		if((*c)->next!=NULL)
		{
		if(aa->data<(*c)->next->data){
		Link l=(Link)malloc(sizeof(LNode));
		l->next=(*c)->next;
		(*c)->next=l;
		l->data=aa->data;
		aa=aa->next;
		}else
		  {     Link l=(Link)malloc(sizeof(LNode));
			l->next=(*c)->next->next;
			(*c)->next->next=l;
			l->data=aa->data;
			aa=aa->next;
		  }	
		}
		else{
                Link l=(Link)malloc(sizeof(LNode));
                l->next=(*c)->next;
                (*c)->next=l;
                l->data=aa->data;
                aa=aa->next;
                }
	}
	else
	{
		    if((*c)->next!=NULL)
                {
                if(bb->data<(*c)->next->data){
                Link l=(Link)malloc(sizeof(LNode));
                l->next=(*c)->next;
                (*c)->next=l;
                l->data=bb->data;
                bb=bb->next;
                }else
                  {
			Link l=(Link)malloc(sizeof(LNode));
                        l->next=(*c)->next->next;
                        (*c)->next->next=l;
			l->data=bb->data;
                        bb=bb->next;
                  }     
                }
                else{
                Link l=(Link)malloc(sizeof(LNode));
                l->next=(*c)->next;
                (*c)->next=l;
                l->data=bb->data;
                bb=bb->next;
                }

	}
	}
	if(aa==NULL)
	{while(bb!=NULL)
	{
		Link l=(Link)malloc(sizeof(LNode));
		l->next=(*c)->next;
                (*c)->next=l;
                l->data=bb->data;
                bb=bb->next;
	}
	}
	else{
		while(aa!=NULL)
		{
	        Link l=(Link)malloc(sizeof(LNode));
                l->next=(*c)->next;
                (*c)->next=l;
                l->data=aa->data;
                aa=aa->next;
		}
	}
}
void yasuo(Link* l)
{
	Link ll=(*l)->next;
	while(ll!=NULL)
	{
		Link temp=(*l);
		while(temp->next!=NULL){
		if(temp->next==ll){
			temp=temp->next;	
		}
		else{
		if(ll->data==temp->next->data)
		{
			temp->next=temp->next->next;
			temp=temp->next;
		}
		temp=temp->next;
		}
		}
		ll=ll->next;
	}
}
void jiao(Link a,Link b,Link* f)
{
	Link aa=a->next;
	(*f)=(Link)malloc(sizeof(LNode));	
	(*f)->next=NULL;
	while(aa!=NULL){
		Link bb=b->next;
		while(bb!=NULL){
		if(aa->data==bb->data){
			Link ll=(Link)malloc(sizeof(LNode));
             		if((*f)->next==NULL){
			ll->next=(*f)->next;
			(*f)->next=ll;
			ll->data=aa->data;
			bb=bb->next;
			}
			else{
				if(aa->data<(*f)->next->data)
				{
					 ll->next=(*f)->next;
                       			 (*f)->next=ll;
                       			 ll->data=aa->data;
                       			 bb=bb->next;

				}else{
					 ll->next=(*f)->next->next;
		                         (*f)->next->next=ll;
                		         ll->data=aa->data;
                       			 bb=bb->next;

					}
				}
		}
		else bb=bb->next;
		}
		aa=aa->next;
	}
	
}
void cha(Link* a,Link b){
	while((*a)->next!=NULL){
		while(b->next!=NULL)
		{
			if((*a)->next->data==b->next->data){
				(*a)->next=(*a)->next->next;
			}
			b=b->next;
		}
		(*a)=(*a)->next;
	}
}






